package util;

/**
 * Consola para facilitar la depuracion
 * @author F. Javier S. Pardo
 */
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;


public class Consola extends JPanel implements ActionListener {
    private JTextArea textAreaReglas;
    private JTextArea textAreaToken;
    private JTextArea textAreaCodObjeto;
    private JTextArea textAreaCodFuente;
    private JTextArea textAreaTS;
    private JTextArea textAreaMensajes;

    private JFrame frame;

    public JTextArea getTextAreaReglas(){
        return this.textAreaReglas;
    }

    public JTextArea getTextAreaTokens(){
        return this.textAreaToken;
    }

    public JTextArea getTextAreaCodObjeto(){
        return this.textAreaCodObjeto;
    }

    public JTextArea getTextAreaCodFuente(){
        return this.textAreaCodFuente;
    }

    public JTextArea getTextAreaTS(){
        return this.textAreaTS;
    }

    public JTextArea getTextAreaMensajes(){
        return this.textAreaMensajes;
    }
    
    public void createAndShowGUI(String sNomFichero) {
        setLayout(new BorderLayout(1,1));

        //Create a text area para el token actual.
        textAreaToken = new JTextArea();
        textAreaToken.setLineWrap(true);
        textAreaToken.setWrapStyleWord(true);
        textAreaToken.setEditable(false);

        JScrollPane scrollPaneToken = new JScrollPane(textAreaToken);
        scrollPaneToken.setVerticalScrollBarPolicy(
                        JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scrollPaneToken.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollPaneToken.setPreferredSize(new Dimension(250, 250));
        scrollPaneToken.setBorder(
            BorderFactory.createCompoundBorder(
                BorderFactory.createCompoundBorder(
                                BorderFactory.createTitledBorder("Token"),
                                BorderFactory.createEmptyBorder(5,5,5,5)),
                scrollPaneToken.getBorder()));

        ///////////////////////////////////////

        //Create a text area para las reglas.
        textAreaReglas = new JTextArea();
        textAreaReglas.setLineWrap(true);
        textAreaReglas.setWrapStyleWord(true);
        textAreaReglas.setEditable(false);

        JScrollPane scrollPaneReglas = new JScrollPane(textAreaReglas);
        scrollPaneReglas.setVerticalScrollBarPolicy(
                        JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scrollPaneReglas.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollPaneReglas.setPreferredSize(new Dimension(500, 250));
        scrollPaneReglas.setBorder(
            BorderFactory.createCompoundBorder(
                BorderFactory.createCompoundBorder(
                                BorderFactory.createTitledBorder("Reglas"),
                                BorderFactory.createEmptyBorder(5,5,5,5)),
                scrollPaneReglas.getBorder()));

        ///////////////////////////////////////

        //Create a text area para el Codigo Objeto.
        textAreaCodObjeto = new JTextArea();
        textAreaCodObjeto.setLineWrap(true);
        textAreaCodObjeto.setWrapStyleWord(true);
        textAreaCodObjeto.setEditable(false);

        JScrollPane scrollPaneCodObjeto = new JScrollPane(textAreaCodObjeto);
        scrollPaneCodObjeto.setVerticalScrollBarPolicy(
                        JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scrollPaneCodObjeto.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollPaneCodObjeto.setPreferredSize(new Dimension(200, 250));
        scrollPaneCodObjeto.setBorder(
            BorderFactory.createCompoundBorder(
                BorderFactory.createCompoundBorder(
                                BorderFactory.createTitledBorder("Codigo objeto"),
                                BorderFactory.createEmptyBorder(5,5,5,5)),
                scrollPaneCodObjeto.getBorder()));

        ///////////////////////////////////////

        //Create a text area para LA Tabla de Simbolos.
        textAreaTS = new JTextArea();
        textAreaTS.setLineWrap(true);
        textAreaTS.setWrapStyleWord(true);
        textAreaTS.setEditable(false);

        JScrollPane scrollPaneTS = new JScrollPane(textAreaTS);
        scrollPaneTS.setVerticalScrollBarPolicy(
                    JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scrollPaneTS.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollPaneTS.setPreferredSize(new Dimension(250, 250));
        scrollPaneTS.setBorder(
            BorderFactory.createCompoundBorder(
                BorderFactory.createCompoundBorder(
                                BorderFactory.createTitledBorder("Tabla de Simbolos"),
                                BorderFactory.createEmptyBorder(5,5,5,5)),
                scrollPaneTS.getBorder()));

        ///////////////////////////////////////

        //Create a text area para el Codigo Fuente.
        textAreaCodFuente = new JTextArea();
        textAreaCodFuente.setLineWrap(true);
        textAreaCodFuente.setWrapStyleWord(true);
        textAreaCodFuente.setEditable(false);

        JScrollPane scrollPaneCodFuente = new JScrollPane(textAreaCodFuente);
        scrollPaneCodFuente.setVerticalScrollBarPolicy(
                        JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scrollPaneCodFuente.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollPaneCodFuente.setPreferredSize(new Dimension(280, 250));
        scrollPaneCodFuente.setBorder(
            BorderFactory.createCompoundBorder(
                BorderFactory.createCompoundBorder(
                                BorderFactory.createTitledBorder("Codigo fuente"),
                                BorderFactory.createEmptyBorder(5,5,5,5)),
                scrollPaneCodFuente.getBorder()));

        ///////////////////////////////////////

        //Create a text area para los mensajes.
        textAreaMensajes = new JTextArea();
        textAreaMensajes.setLineWrap(true);
        textAreaMensajes.setWrapStyleWord(true);
        textAreaMensajes.setEditable(false);

        JScrollPane scrollPaneMensajes = new JScrollPane(textAreaMensajes);
        scrollPaneCodFuente.setVerticalScrollBarPolicy(
                        JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scrollPaneMensajes.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollPaneMensajes.setPreferredSize(new Dimension(500, 150));
        scrollPaneMensajes.setBorder(
            BorderFactory.createCompoundBorder(
                BorderFactory.createCompoundBorder(
                                BorderFactory.createTitledBorder("Mensajes"),
                                BorderFactory.createEmptyBorder(5,5,5,5)),
                scrollPaneMensajes.getBorder()));

        ///////////////////////////////////////

        //Configurar panel superior derecho
        JSplitPane splitUpperRightPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
                                              scrollPaneCodObjeto,
                                              scrollPaneCodFuente);
        splitUpperRightPane.setOneTouchExpandable(true);
        
        //Configurar panel derecho
        JSplitPane splitRightPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,
                                              splitUpperRightPane,
                                              scrollPaneTS);
        splitRightPane.setOneTouchExpandable(true);


        //Configurar panel izquierdo
        JSplitPane splitLeftPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,
                                              scrollPaneToken,
                                              scrollPaneReglas);
        splitLeftPane.setOneTouchExpandable(true);

        //Configurar panel central superior
        JSplitPane splitUpperCenterPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
                                              splitLeftPane,
                                              splitRightPane);
        //Configurar panel total
        JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,
                                              splitUpperCenterPane,
                                              scrollPaneMensajes);
        splitPane.setOneTouchExpandable(true);
      
        //Juntarlo todo.
        add(splitPane, BorderLayout.CENTER);

        //Create and set up the window.
        frame = new JFrame("CONSOLA DE DEPURACION - " + sNomFichero);
        frame.setResizable(true);
        
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        //Add content to the window.
        frame.add(this);

        //Display the window.
        frame.pack();
        //Iniciar el formulario maximizado
//        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frame.setLocationRelativeTo (null);
        frame.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        return;
    }
}

